package org.ehe.business.project.domain.bo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.ehe.business.drawing.domain.DesignDrawing;
import org.ehe.common.mybatis.core.domain.BaseEntity2;
import org.ehe.system.domain.vo.SysOssVo;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @author :zhangnn
 * @className :ProjectEntity
 * @description: 项目信息表
 * @date 2025-07-16 10:36:45
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectEntityBo extends BaseEntity2 {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 父级项目ID，用于支持子任务
     */
    private Long parentId;

    /**
     * 项目名称
     */
    private String projectName;

    /**
     * 项目编码
     */
    private String projectCode;

    /**
     * 项目类型：新产品开发/维护/优化等
     */
    private String projectType;

    /**
     * 项目难度：容易/中级/困难/特困
     */
    private String difficultyId;

    private String difficultyName;

    /**
     * 难度系数：容易5/中级10/困难15/特困20
     */
    private Integer difficultyScore;

    /**
     * 计划天数
     */
    private Integer plannedDays;

    /**
     * 项目优先级：低/普通/高/紧急
     */
    private String priority;

    /**
     * 项目级别：特级/较高/普通
     */
    private String projectLevel;

    /**
     * 项目阶段(固定)：启动阶段/计划阶段/执行阶段/结项阶段
     */
    private String projectStage;

    /**
     * 项目描述
     */
    private String description;

    /**
     * 项目状态：规划中/进行中/已完成/已取消/未开始
     */
    private String status;

    /**
     *   PENDING_SUBMIT(0,"待提交"),
     *     SUBMITTED(1,"已提交"),
     *     REJECTED(9,"已拒绝"),
     *     PROCESS(10, "审核中"), // 审核中
     *     APPROVE(20, "已审核"); // 审核通过
     */
    private String approveStatus;

    /**
     * 层级级别，最多5层
     */
    private Integer level;

    /**
     * 层级路径，用于快速查询
     */
    private String path;

    /**
     * 计划开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime plannedStartDate;

    /**
     * 计划结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime plannedEndDate;

    /**
     * 实际开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime actualStartDate;

    /**
     * 实际结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime actualEndDate;

    /**
     * 指定工程师
     */
    private String assignedEngineer;

    /**
     * 工程师名称
     */
    @TableField(exist = false)
    private String assignedEngineerName;

    /**
     * 工程师级别：K1/K2/K3/K4/K5
     */
    private String engineerLevel;

    /**
     * 附件文件信息
     */
    private String attachmentFileIds;
//    /**
//     * 设计图纸Ids
//     */
//    private String drawIds;

    /**
     * 超期项目
     */
    private boolean overdue;

    private String flag;
}
